home *** CD-ROM | disk | FTP | other *** search
/ Power CD-ROM!! 8 / Power CD-ROM 8.iso / prgmming / use_umbs / use!umbs.doc < prev    next >
Text File  |  1994-11-02  |  31KB  |  693 lines

  1.  
  2.  
  3.  
  4. USE!UMBS Documentation                                 Page  1
  5. ==============================================================
  6.  
  7. DOCUMENTATION FOR USE!UMBS.SYS Ver 2.0      Utrecht, 21 Nov 91
  8.  
  9. --------------------------------------------------------------
  10.  
  11. PROGRAM   USE!UMBS.SYS 
  12.           Upper Memory Block Manager for PC/XT/ATs
  13.  
  14. PURPOSE   This program is a device driver that will handle
  15.           calls for Upper Memory Blocks. In doing so, it gives
  16.           you the possibility to save conventional memory by
  17.           storing device drivers and resident programs in the
  18.           UMBs and hence save conventional memory. It takes up
  19.           only 256 bytes of your (conventional) memory and is
  20.           fully compatible with MS-DOS 5.0.
  21.  
  22. REQUIRES  It will work on any PC/XT/AT or higher, either with
  23.           or without extended memory. What you obviously
  24.           *must* have are UMBs, and MS-DOS Version 5.0. It
  25.           will not be useful on 386sx or higher.
  26.  
  27. EXTRA'S   Since Video-RAM is RAM in Upper Memory too, you can
  28.           use it just as well as other UMBs. You only have to
  29.           take care that you use an UNused part of Video memo-
  30.           ry.
  31.  
  32. PROBLEMS  Since ExPANded Memory is remapped to the range of
  33.           addresses where UMBs would normally be, I think this
  34.           program will not cooperate with your expanded memory
  35.           manager. Since I could not test the program on many
  36.           different configurations, I kindly ask you to report
  37.           any problems to me. I don't expect many problems
  38.           though, since USE!UMBS is a `friendly' programme: it
  39.           complies completely with the rules of MS-DOS 5.0.
  40.  
  41. AUTHOR    Marco van Zwetselaar               Phone: 030-313128
  42.           Oorsprongpark 5                 Email: zwets@rivm.nl
  43.           3581 ES Utrecht                 
  44.           The Netherlands
  45.  
  46. ==============================================================
  47.  
  48.  
  49. USE!UMBS Documentation                                 Page  2
  50. ==============================================================
  51.  
  52. I wrote this program for my own entertainment, not in order to
  53. make money. Therefore I dedicate it to the Public Domain. Feel
  54. free to copy it and pass it on to friends - just make sure
  55. this documentation file is included.
  56.  
  57. If you find this program useful enough to reward me for writ-
  58. ing it, you may send me a donation anuwhere from 50 cents upto
  59. 25 guilders. My giro number is 5636618, my snailmail address
  60. is displayed above.
  61.  
  62. If you have any questions, just contact me via one of the
  63. above-mentioned addresses. I will be pleased to help you out -
  64. whether you are a donator or not. Also, if you find any incon-
  65. sistencies or mistakes in this documentation, please notify me
  66. of them, so that I can correct them in a possible next versi-
  67. on. Finally, if you think you can improve the driver, please
  68. do so. For this purpose I have included the asm-code code in
  69. the archive. But if you do so: keep it well documented.
  70.  
  71. Marco van Zwetselaar.
  72.  
  73. ==============================================================
  74.  
  75. CONTENTS
  76.  
  77. 1. General Introduction & Definitions                        3
  78.  
  79. 2. Preparations                                              6
  80.  
  81. 3. Using VideoRAM                                            7
  82.  
  83. 4. Patching in the Addresses                                 9
  84.  
  85. 5. Installation                                             12
  86.  
  87. Appendix 1. Functional description of driver (freaks)       13
  88.  
  89. Appendix 2. Detailed description of driver (utter freaks)   14
  90.  
  91. ==============================================================
  92.  
  93.  
  94. USE!UMBS Documentation                                 Page  3
  95. ==============================================================
  96.  
  97. 1. General Introduction & Definition of Terms:
  98.  
  99. In this first section I will explain how the memory on IBM-
  100. compatibles is organized, and what UMBs actually are. If you
  101. are not interested in `backgrounds', you may skip this section
  102. and move on to section 2 (page 6) rightaway. (I advise you to
  103. at least have a glance at this section though.)
  104.  
  105. Conventional Memory
  106.      Conventional memory is the memory that is present on any
  107.      IBM or compatible. Its maximum size is 640K, and nearly
  108.      all IBM-compatible computers have exactly that amount.
  109.      Conventional memory is used in a conventional way, i.e.
  110.      any user program may make use of it, as may the operating
  111.      system. Actually, most user programs won't even use
  112.      anything except conventional memory (unless specifically
  113.      told to do so). Conventional memory resides in the first
  114.      640K of the adressable memory. That is, at the addresses
  115.      00000-9FFFF.
  116.  
  117. Addressable Memory
  118.      The computer can address more than just 640K of conven-
  119.      tional memory. The maximum amount a specific computer can
  120.      address depends on the type of CPU it has (8086, 80286,
  121.      and so on). But whatever CPU it may have, it can *always*
  122.      address the first 1M of memory. (That's why it is called
  123.      Adressable Memory, I suppose.)
  124.      Addressable Memory consists of two parts: the first 640K
  125.      are Conventional Memory (adresses 00000-9FFFF), the
  126.      remaining 384K are Upper Memory (adresses A0000-FFFFF).
  127.  
  128. Upper Memory
  129.      Upper Memory is the upper 384K of Adressable Memory,
  130.      which begins just beyond the 640K conventional memory
  131.      border. This implies that it is located at the addresses
  132.      A0000-FFFFF.
  133.  
  134.      Since Upper Memory is normally addressable on any PC, you
  135.      might wonder why programs don't make use of it. The
  136.      reasons are the following:
  137.      (1)  The operating system and the hardware make use of
  138.           parts of it already. For example, anything you see
  139.           on the screen is stored in an area in UM - you can
  140.           probably imagine what will happen if you mess around
  141.           in that area. Also the computer itself will store
  142.           some of its vital data in UM - and we don't want to
  143.           embarrass MS-DOS, who's having hard times already.
  144.  
  145. ==============================================================
  146.  
  147.  
  148. USE!UMBS Documentation                                 Page  4
  149. ==============================================================
  150.  
  151.      (2)  Even if there are parts of Upper Memory that are not
  152.           in use already, these parts may not be RAM. What
  153.           this means is that one may *read* data from those
  154.           locations, but not *write* anything into them. (In
  155.           fact, you can try and write something into them, but
  156.           it will vanish mysteriously into thin air.)  
  157.           Most computers don't have RAM in these areas, first-
  158.           ly because that would make the computer more expen-
  159.           sive, and secondly because MS-DOS was not designed
  160.           to use anything above the 640K border anyway.
  161.      (3)  Even if there are unused parts of UM that do consist
  162.           of RAM (readable & writeable memory), dos will not
  163.           normally make them available as conventional memory.
  164.           This is precisely why I wrote this device driver:
  165.           since Version 5.0, Dos can use the UMBs to store
  166.           prog- rams, namely device drivers and TSRs. Device
  167.           drivers are the files that you install via the DEVI-
  168.           CE=... lines in your config.sys; they take care of
  169.           interfacing dos with your hardware. Dos usually
  170.           loads these devices in conventional memory. If you
  171.           have UMBs (or a 386) you can load the devices into
  172.           them using the DEVICEHIGH=... statement, instead of
  173.           the DEVICE=... statement. TSRs (Terminate and Stay
  174.           Resident) programs are programs that stay in memory
  175.           after they are executed. Some of these programs stay
  176.           resident so that you can invoke them during other
  177.           programs using a HotKey (sidekick for example),
  178.           others stay resident because they perform tasks in
  179.           the background (like screenblankers, autopark, dos-
  180.           key, fastopen, etc). Normally, TSRs will be loaded
  181.           into conventional memory. Dos 5.0 provides the com-
  182.           mand LOADHIGH (may be abbreviated to LH) to put them
  183.           into the UMBs. You do this by preceding the TSR's
  184.           invocation line in the autoexec.bat by LH (or LOAD-
  185.           HIGH). So, if you 'd normally use "FASTOPEN C:=200",
  186.           you now put "LH FASTOPEN C:=200" in the autoexec.
  187.  
  188. Extended Memory
  189.      Extended Memory is, by definition, all memory that is
  190.      located beyond the 1MB border. So, its addresses start at
  191.      100000. Since a computer needs to have more than 20
  192.      address lines in order to address such large addresses,
  193.      PCs and XTs can't have extended memory (they have preci-
  194.      sely 20 lines). On an AT or higher one can access exten-
  195.      ded memory by enabling address lines A20 (and higher - if
  196.      you start counting at 0, that is the 21st line and hig-
  197.      her).
  198.  
  199. ==============================================================
  200.  
  201.  
  202. USE!UMBS Documentation                                 Page  5
  203. ==============================================================
  204.  
  205.      So in order to make use of extended memory, a program
  206.      must have a special design - more and more programs are
  207.      offering eXtended memory support. But since many programs
  208.      use eXtended memory in many different ways, conflicts may
  209.      arise. In order to resolve these, a standard way of
  210.      accessing extended memory was developed. 
  211.      This is specified in the XMS (eXtended Memory Specifica-
  212.      tion). MS-Dos 5.0 provides you with a manager for XM -
  213.      this manager will 'hand out' extended memory to programs
  214.      that make a request according to XMS specs. The problem
  215.      with dos's XMS-manager (HIMEM.SYS) is that it doesn't
  216.      handle requests for UMBs (they simply haven't implemented
  217.      that function, probably because most XTs and ATs don't
  218.      have UMBs anyway). What MicroSoft does provide is
  219.      EMM386.EXE, which is an exPANded memory manager that
  220.      handles UMB-requests as a side-effect. The problem is
  221.      that this manager can only be installed on 386s or hig-
  222.      her. The reason for this is that only a 386 has the
  223.      ability to 'remap' expanded memory to UMB locations, thus
  224.      providing RAM in Upper Memory locations.
  225.  
  226.      So, what can you do if you have UMBs on an XT or AT?
  227.      Suppose you have extended memory - so you can install
  228.      HIMEM.SYS - then you still can't use the UMBs because
  229.      EMM386.EXE won't work on  your machine... Now say you
  230.      have no extended memory *at all* (which will always be
  231.      the case on an XT), then you can't load himem in the
  232.      first place! In both cases, USE!UMBS will be the right
  233.      thing to use.
  234.  
  235. HMA - High Memory Area
  236.      The HMA is the first block of 64K of extended memory (so
  237.      with addresses 100000-10FFFF). Since Dos 5.0, it is
  238.      possible to load the system files into this area. (System
  239.      files are *not* the devices that you install: dos in-
  240.      stalls them at boot-time!) 
  241.      In order to highload these systemfiles, you must have
  242.      extended memory, and insert the lines DEVICE=HIMEM.SYS
  243.      and DOS=HIGH at the front of your config.sys file. If you
  244.      don't have an HMA, then you can not use dos=high. You can
  245.      use dos=umb though.
  246.  
  247. Expanded Memory
  248.      Expanded memory can't be defined in terms of 'adresses',
  249.      since it is organized altogether differently. It resides
  250.      on a separate 'card' that you plug into a free slot in
  251.      your computer, and it cannot be accessed all at once but
  252.      in 'pages'. 
  253.  
  254. ==============================================================
  255.  
  256.  
  257. USE!UMBS Documentation                                 Page  6
  258. ==============================================================
  259.  
  260. What happens is that pages of say 16K are 'remapped' from the
  261. expanded memory board to addresses in Upper Memory. If the
  262. computers wants to find something in an area elsewhere on the
  263. card, an expanded memory manager must take care of storing the
  264. present page and making the new page active. As was the case
  265. with XMS, people have also devised a standard for access to
  266. expanded memory. This standard is the LIM/EMS specification
  267. (now at revision 4.0). Dos 5.0 provides a manager for it:
  268. EMM386.EXE. As said before, this manager will only work on a
  269. 386, and since it takes care of the UMBs too, you are advised
  270. to rather use EMM386 when you have a 386 or higher. (USE!UMBS
  271. will, in fact, not install if it finds out that a UMB manager
  272. was installed already.)
  273.  
  274. ==============================================================
  275.  
  276. 2. Preparations
  277.  
  278. This program will install a UMB manager on any PC, XT, AT or
  279. higher, whether it has extended or expanded memory or not. In
  280. order to be able use it, it must have UMBs, i.e. holes in the
  281. memory-area between 640k and 1M that are filled with RAM.
  282.  
  283. How do you find out whether you have UMBs? Firstly, let me say
  284. that there are not many PC/XT/ATs that do have them (refer to
  285. section 1 if you want to find out why). One XT that I know of
  286. certainly has them, namely the Philips 31xx series XTs. I ori-
  287. ginally wrote the program for precisely that machine. Later on
  288. I found out it might be useful for other machines as well.
  289.  
  290. If you want to find out whether you have UMBs, run the program
  291. TEST!UMB.EXE. This program will run through the upper memory
  292. and try if it can write information there. (By the way: don't
  293. worry. It won't destroy anything while doing that!) 
  294.  
  295. The locations where TEST!UMB can succesfully change values are
  296. RAM locations. It will display a table with its findings, sta-
  297. ting:
  298.      "None      at paragraphs xxxx until xxxx" or
  299.      "Found RAM at paragraphs xxxx until xxxx"
  300.  
  301. Don't be too optimistic if it displays a range of adresses
  302. where it finds RAM: it will always find at least one such
  303. range! That range is occupied with Video-RAM, and you can't
  304. simply use all of that as a UMB (refer to section 1 for de-
  305. tails).
  306.  
  307. ==============================================================
  308.  
  309.  
  310. USE!UMBS Documentation                                 Page  7
  311. ==============================================================
  312.  
  313. So now comes the tricky bit: which ranges can you use?
  314. First of all, if TEST!UMB shows that there is RAM in the range
  315. D000 until EFFF, then you have "true" UMBs. And you can use my
  316. device driver rightaway. These two blocks (the D and the E
  317. block) provide you with 128K of Upper Memory - probably by far
  318. enough to store all of your device drivers and TSRs.
  319. So, if you are in that lucky situation and don't want to
  320. complicate matters, you can move on to section 5 (Installa-
  321. tion, page 12) rightway.
  322.  
  323. If you were less fortunate and TEST!UMB showed that there is
  324. no RAM in that range, or in only a part of that range, or if
  325. you don't want to use all of that range, or if you want to use
  326. more than one range, then you should read section 3 and/or
  327. section 4.
  328.  
  329. ==============================================================
  330.  
  331. 3. Using VideoRAM or other ranges as a UMB
  332.  
  333. If you don't have RAM in the D000-EFFF range, or if you want
  334. to use a different range of memory, then you must make a small
  335. modification to the driver: you must `patch in' the addresses
  336. that it should manage.
  337. This may sound difficult, and yes, it is not simple... The
  338. point is that I had wanted to use command line parameters to
  339. specify the range(s) the driver should manage... but I don't
  340. know how to program that option. [So, If YOU are a proficient
  341. Assembly programmer, please change the source code and include
  342. that option!]
  343.  
  344. Anyway, let's go for it:
  345. If TEST!UMB showed that you have RAM outside the D000-EFFF
  346. range, that RAM may be of three kinds:
  347. (1)  Completely free RAM - not used by the videocard or by any
  348.      other program. This is good news: you can use it as a UMB
  349.      without any problems - you only have to patch the addres-
  350.      ses into USE!UMBS.SYS.
  351. (2)  Graphics VideoRAM - this is only used by the video system
  352.      when you are working in graphics mode. If you don't use
  353.      graphics, you may use this RAM as a UMB. Beware to boot
  354.      your computer without USE!UMBS.SYS if you intend to use
  355.      graphics programs! (It won't damage anything, though,
  356.      your computer will simply hang once it switches to grap-
  357.      hics mode.)
  358. (3)  Text VideoRAM - sorry, but you really can't use this. If
  359.      you would, then how could you get anything on the screen?
  360.  
  361. ==============================================================
  362.  
  363.  
  364. USE!UMBS Documentation                                 Page  8
  365. ==============================================================
  366.  
  367. Finding out to which of the three categories your RAM belongs
  368. is complicated: it depends on your videocard. I will try and
  369. describe as well as I can what ranges each videocard uses. As
  370. said above: you can use any range as long as it doesn't inclu-
  371. de the Text Range; and you may use the Graphics Range, but
  372. only if you don't switch to graphics mode. Read the Advice
  373. carefully - but note that this doesn't guarantee anything!
  374. (Thanks to Eef Hartman for the information about addresses.)
  375.  
  376. Monochrome Display Adapter (MDA)
  377.    TEXT     : B000-B0FF    (4K)
  378.    GRAPHICS : None         (0K)
  379.    ADVICE This is a very old-fashioned one. It was in the
  380.           original IBMs. It can't do any graphics, only text.
  381.           So if you appear to have *any* RAM outside the text
  382.           range specified above: use it.
  383.  
  384. Color Graphics Adapter (CGA)
  385.    TEXT     : B800-B8FF    (4K)
  386.    GRAPHICS : B800-BBFF   (16K)
  387.    ADVICE If there is any RAM outside the graphics range
  388.           (B800-BBFF) then that RAM is not used by the CGA
  389.           adaptor, and you may problemlessly use it. 
  390.           If you want to use the graphics range, take care:
  391.           this may give problems since the CGA adapter often
  392.           uses it as 4 pages of text.
  393.  
  394. Hercules Adapter
  395.    TEXT     : B000-B0FF    (4K)
  396.    GRAPHICS : B000-BFFF   (64K) full
  397.          or : B000-B7FF   (32K) half
  398.    ADVICE If there is any RAM outside the graphics range
  399.           (B000-BFFF) then that RAM is not used by the Hercu-
  400.           les adaptor, and you may problemlessly use it. 
  401.           If you want to use the graphics range, take care:
  402.           the hercules adapter may use the first half of its
  403.           RAM (B000-B7FF) to store several text pages. So if
  404.           you want to use the graphics range, use B800-BFFF.
  405.           If you have a half (1 page) hercules, then you don't
  406.           have that range.
  407.  
  408. ==============================================================
  409.  
  410.  
  411. USE!UMBS Documentation                                 Page  9
  412. ==============================================================
  413.  
  414. Enhanced Graphics Adapter (EGA)
  415.    TEXT     : B000-B0FF     (4K) mono mode
  416.             : B800-B8FF     (4K) color mode
  417.    GRAPHICS : A000-AFFF    (64K)
  418.    ADVICE As you see, you can use the A segment as a UMB if
  419.           you don't use graphics applications.
  420.           You may also use parts of the B segment, but notice
  421.           that the EGA card will use one of the two text are-
  422.           as: the lower one when it is in mode MONO, the upper
  423.           one when it is in mode CO80.
  424.  
  425. V? Graphics Adapter (VGA)
  426.    TEXT     : same as EGA
  427.    GRAPHICS : same as EGA, but sometimes also the range
  428.               B000-BFFF    (64K)
  429.    ADVICE There is a large variety of VGA cards. I can't tell
  430.           you precisely what ranges you may use. What is sure
  431.           is that you can follow the advice of the EGA card:
  432.           as long as you don't use graphics, the A000-AFFF
  433.           range is at your disposal.
  434.                                      
  435. ==============================================================
  436.  
  437. 4. Patching in the addresses
  438.  
  439. This is the hardest bit. As I mentioned before, I wrote this
  440. driver for the Philips 35xx series, so it will by default only
  441. manage the block from D000 until EFFF. If you don't have that
  442. entire block at your disposal, you will have to change some
  443. code in the file. I will describe below how you can patch in
  444. the adresses using the DEBUG program, which you will have,
  445. since it came with the MS-DOS package.
  446.  
  447. First of all, you need to know the addresses of the block(s)
  448. you want to patch in. The maximum number of separate blocks
  449. you can patch in is three. I don't think you will need more
  450. than that; if you think you do, contact me, and I can fix it
  451. for you. (As long as the RAM is contiguous, you can specify it
  452. in one block, however long the contiguous block is.)
  453.  
  454. Once you know the starting and the ending address of a block,
  455. you should calculate its length (in paragraphs). How do you do
  456. that? You simply subtract the beginning address from the end
  457. adress, USING HEXADECIMAL CALCULATION. [Hex calculation goes
  458. just like decimal calculation, only that the numbers 10
  459. through 15 are changed to A through F]
  460.  
  461. ==============================================================
  462.  
  463.  
  464. USE!UMBS Documentation                                 Page 10
  465. ==============================================================
  466.  
  467. Some examples:
  468.  
  469.   End address   :    AFFF   BFFF   BBFF   E7FF   EFFF   EFFF
  470.   Begin address :    A000   B800   B0FF   E000   D7FF   D000 
  471.   ------------- -    ----   ----   ----   ----   ----   ----
  472.   Length        :    0FFF   07FF   0B00   07FF   1800   1FFF
  473.  
  474. So, what you do is (just as with decimal calculation): go from
  475. right to left and each time subtract two digits. If you have
  476. to `borrow' you can do so. Keep in mind that e.g. F-7=8 (bec-
  477. ause 15-7=8) and that 10-8=8, because 16-8=8.
  478.  
  479. Ok, now you must patch the starting address and the length of
  480. each block into USE!UMBS.SYS. Only ... there is a twist now:
  481. both values have to be reversed bytewise before being patched
  482. in. It's best to explain this using an example: suppose you
  483. have a block, which starts at B800 and has length 07FF, then
  484. you reverse the bytes as follows:
  485.  
  486.      Address  Length
  487.      B8 00    07 FF
  488.       \ /      \ /
  489.       / \      / \
  490.      00 B8    FF 07 
  491.  
  492. So, the sequence B800 07FF becomes 00 B8 FF 07. And this is
  493. the sequence we will patch in. If you have more blocks, trans-
  494. pose them in the same way, and append them to this sequence.
  495. (But *never* more than three blocks in total!!!)
  496.  
  497. Then startup the debug program with the following command:
  498.  
  499.      DEBUG USE!UMBS.SYS
  500.  
  501. and debug will report with its prompt:
  502.      -
  503. (if this doesn't happen: make sure debug is in the search path
  504. and use!umbs.sys is in the current directory. You can type Q
  505. to exit from debug).
  506.  
  507. Now type:
  508.  
  509.      -E153
  510.  
  511. (don't type the hyphen, and finish with carriage return)
  512. and debug will say this
  513.  
  514.      xxxx:0153  00._
  515.  
  516. ==============================================================
  517.  
  518.  
  519. USE!UMBS Documentation                                 Page 11
  520. ==============================================================
  521.  
  522. Now, type the first byte of your sequence, and finish with a
  523. SPACE, NOT A CARRIAGE RETURN!!!. So, if your first byte was
  524. (for example) AB, you will now see something like this:
  525.  
  526.      xxxx:0153  00.AB  D0._
  527.  
  528. Now, type the next byte, AGAIN FOLLOWED BY A SPACE, NOT A
  529. CARRIAGE RETURN! And keep on doing this until you have entered
  530. the whole sequence (which amounts to 4 bytes for one block, 8
  531. bytes for two blocks, 12 for three blocks). After having
  532. completed this, STILL DON'T PRESS CARRIAGE RETURN, but enter
  533. another four bytes, all with value 00, every time using the
  534. spacebar to move to the next. (These 00-bytes signal the end
  535. of the list.)
  536.  
  537. If you have done that, you may now finally press RETURN to get
  538. back to the debug-prompt. If you made any mistakes, you can
  539. now press Q to quit without changes, but if everything went
  540. alright, press W to write away the changes. (And afterwards Q
  541. to exit the programme.)
  542.  
  543. Well, that was it... Now you can continue to the next section
  544. and finally install USE!UMBS.SYS.
  545.  
  546. ==============================================================
  547.  
  548.  
  549. USE!UMBS Documentation                                 Page 12
  550. ==============================================================
  551.  
  552. 5. Installation
  553.  
  554. In order to install USE!UMBS.SYS, follow the following three
  555. steps carefully.
  556.  
  557. STEP I: Tell DOS to install the device driver.
  558. You do this by adding this line to your config.sys:
  559. DEVICE=USE!UMBS.SYS
  560. (Provided USE!UMBS.SYS is in the root directory.) 
  561. The position at which this line is placed is important! If you
  562. have an extended or expanded memorymanager (like HIMEM.SYS),
  563. then the line DEVICE=USE!UMBS.SYS must come *after* the line
  564. specifying the other manager. On the other hand, it must come
  565. *before* any other line that starts with DEVICE=.
  566. On the whole: put it as much as possible toward the beginning
  567. of your config.sys, but never before the installation line of
  568. an XMS or EMS driver.
  569.  
  570. STEP II: Tell DOS to actually use the UMBs
  571. You do this as follows: If there is a line saying DOS=HIGH in
  572. your config.sys, then change it to DOS=HIGH,UMB. If there is
  573. no such line, then add the line DOS=UMB to the config.sys.
  574. Also here, position is important: make sure the line is on the
  575. *very first* line of your config.sys. (And therefore comes
  576. somewhere before DEVICE=USE!UMBS.SYS)
  577.  
  578. STEP III: Tell DOS which things to put in the UMBs
  579. There are two kinds of things that can be put in the UMBs:
  580. device drivers and TSRs. Device drivers are `highloaded' by
  581. changing their lines in the config.sys from DEVICE=... to
  582. DEVICEHIGH=.... The TSRs are highloaded by preceding their
  583. invocation line in the autoexec.bat with LOADHIGH (or LH). So:
  584. if there formerly was a line saying AUTOPARK in your auto-
  585. exec.bat, now it should become LH AUTOPARK.EXE or LOADHIGH
  586. AUTPARK.EXE.
  587. [NOTE: Some people load TSRs via the config.sys instead of the
  588. autoexec.bat by using the line INSTALL=.... If this is the
  589. case, you better remove them from the config.sys and LOADHIGH
  590. them via the autoexec.bat.]
  591.  
  592. Well, that's all there is to it.
  593. Once you have made all the changes, try MEM to see how much
  594. memory you have left. Then reboot (and see USE!UMBS sign on),
  595. wait for the DOS-prompt and then run MEM again. Calculate the
  596. difference USE!UMBS makes. Now divide this difference by 2000.
  597. The result is - in my humble opinion - a reasonable donation
  598. for the author. (But, of course, it's up to you...)
  599.  
  600. ==============================================================
  601.  
  602.  
  603. USE!UMBS Documentation                                 Page 13
  604. ==============================================================
  605.  
  606. Appendix 1. Functional description of the driver 
  607.             (for the freaks).
  608.  
  609. This program is a device driver that will install a routine
  610. that handles requests for UMBs. These requests are made by
  611. MS-Dos if it has read the statement DOS=[high,]UMB in the
  612. config.sys file and encounters a DEVICEHIGH or a LOADHIGH
  613. statement. (For more information about devicehigh and loadhigh
  614. see the MS-Dos 5.0 manual.)
  615.  
  616. The UMB-requests are normally sent to the extended memory
  617. manager, which, in the case of Dos 5.0, is HIMEM.SYS. There
  618. are two problems here. Firstly, if you don't have extended
  619. memory, you cannot have Himem.sys installed. And since PCs and
  620. XTs can't even have extended memory, they can never install
  621. himem.sys. Secondly, even if you DO have extended memory AND
  622. install Himem.sys, you still have no access to the UMBs becau-
  623. se Himem doesn't implement a UMB manager, only an XMS handler.
  624. The UMB-handler is provided by a separate device driver,
  625. namely EMM386.SYS. And yes, as the name suggests, you can't
  626. install this on an AT (286). 
  627.  
  628. So, what this USE!UMBS does is the following: it will install
  629. a routine that will intercept any requests to the extended
  630. memory manager. It then checks this request in order to see if
  631. it is a request for UMBs. If it is, then it will handle the
  632. request, otherwise it will pass them on to the XMS handler. If
  633. you don't have an XMS driver installed (which is quite fair if
  634. you don't have eXtended memory), USE!UMBS will not forward the
  635. request but answer it with a polite "no", so that nothing will
  636. hang or mess up. (So, in a way, USE!UMBS will install a HIMEM
  637. manager too - but since there is no high memory to manage, it
  638. won't have much to do anyway.) 
  639.  
  640. ==============================================================
  641.  
  642.  
  643. USE!UMBS Documentation                                 Page 14
  644. ==============================================================
  645.  
  646. Appendix 2. Technical description of the driver
  647.             (details for the real freaks)
  648.  
  649. A request to the XMS manager goes in two steps. First, the
  650. caller will want to find out whether there is a manager and,
  651. if so, where it is. Second, it will call the manager with a
  652. specification of what it should do.
  653.  
  654. The first step is done via interrupt 2Fh (the multiplexer).
  655. This interrupt handles a lot of very different requests, which
  656. it classifies by looking in the AH register. If this contains
  657. 43h, the request is for the XMS manager. So what we do is
  658. chain a little bit of code to the front of the interrupt 2Fh
  659. handler - this added code will determine if AH=43h. If it is
  660. not, it gives control back to the old INT 2F handler, if it
  661. is, it will take over. 
  662.  
  663. Once it has taken over, it will check the AL register. This
  664. register specifies the precise nature of the question. It can
  665. contain only two possible values: 00h and 10h. If it contains
  666. 00h, this means that the question is "Hullo! Is there any
  667. XMS-manager installed?", and our response should be "Yo!"
  668. (because that's exactly what we are installing). We signal a
  669. yes by returning 80h in the AL register. If AL contains 10h
  670. upon entry, then the question is "Well then, where can I find
  671. that XMS manager?". So in this case we return its address in
  672. the registers ES:BX. The address we pass is, yes, the address
  673. of the XMS manager that we are installing.
  674.  
  675. The second step. After the caller has used the interrupt
  676. described above to find out about the existence (4300) and the
  677. whereabouts (4310) of the XMS manager, it will at some point
  678. call it. It calls it by simply making a FAR JMP to the address
  679. that was previously specified in ES:BX. 
  680.  
  681. Upon entering the XMS manager, we first have to check its AH
  682. register in order to find out whether the request is for UMBs
  683. or for extended memory. If it is anything else than 10h (= "I
  684. want a UMB"), our UMB-manager will do the following: (a) IF
  685. another XMS-manager (like MS-Dos's HIMEM.SYS) was loaded
  686. before, it will pass the request on to that manager, (b) IF
  687. NOT, it will return an errorcode saying that there is no XMS
  688. memory. If the request actually is for UMBs (AH=10h), then it
  689. will provide them as long as there are any. 
  690.  
  691. [END OF DOCS]
  692. ==============================================================
  693.